package com.ctshk.rpc.system.service;

import java.util.List;

import javax.validation.Valid;

import com.ctshk.common.dto.Result;
import com.ctshk.common.enums.SystemError;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.system.dto.QueryAgentByNameDTO;
import com.ctshk.rpc.system.dto.SysAgentDTO;
import com.ctshk.rpc.system.dto.SysAgentQueryListDTO;
import com.ctshk.rpc.system.dto.SysAgentUsableDTO;
import com.ctshk.rpc.system.req.SysAddAgentReq;
import com.ctshk.rpc.system.req.SysAgentApprovalReq;
import com.ctshk.rpc.system.req.SysAgentQueryListReq;
import com.ctshk.rpc.system.req.SysAgentQueryUsableListReq;
import com.ctshk.rpc.system.req.SysAgentUpdateStatusReq;

/**
 * <p>
 * 代理商 服务类
 * </p>
 *
 * @author 张志朋
 * @since 2021-02-04
 */
public interface ISysAgentService  {

    /**
     * 新增代理商
     *
     * @param sysAddAgentReq 入参
     * @param userId 当前登录人id
     * @param addType 1仅保存,2走审批流程 
     * @return
     */
    Result add(SysAddAgentReq sysAddAgentReq, Long userId, int addType);

    /**
     * 根据id查询代理商
     *
     * @param id 代理商id
     * @return
     */
    Result<SysAgentDTO> query(Long id);

    /**
     * 编辑代理商
     *
     * @param sysAgentEditReq 编辑代理商对象
     * @param userId 当前登录人id
     * @param addType 1仅保存,2走审批流程
     * @return
     */
    Result editAgent(SysAddAgentReq req, Long userId, int addType);

    /**
     * 代理商管理列表查询
     *
     * @param req 入参
     * @return
     */
    PageResponse<SysAgentQueryListDTO> queryAgentList(SysAgentQueryListReq req, TokenUser tokenUser);

    /**
     * 代理商管理列表查询（验证）
     *
     * @param req 入参
     * @return
     */
    PageResponse<SysAgentQueryListDTO> queryAgentListPer(SysAgentQueryListReq req, TokenUser tokenUser);

	/**
	 * 代理商管理列表查询All
	 *
	 * @param req 入参
	 * @return
	 */
	PageResponse<SysAgentQueryListDTO> queryAgentListAll(SysAgentQueryListReq req);

    /**通过名称查询代理商
	 * @param name 代理商名称
	 * @return
	 */
	Result<List<QueryAgentByNameDTO>> queryAgentByName(String name);

	/**修改代理商状态
	 * @param req
	 * @return
	 */
	Result updateStatus(@Valid SysAgentUpdateStatusReq req);

	/**代理商审核
	 * @param req
	 * @return
	 */
	Result approval(@Valid SysAgentApprovalReq req);
	
	/**
	 * 查询可用的代理商列表
	 * @param req
	 * @return
	 */
	Result<List<SysAgentUsableDTO>> queryUsableAgentList(SysAgentQueryUsableListReq req);

	/**通过名称查询代理商  在指定的集合内做筛选
	 * @param name 代理商名称
	 * @return
	 */
	Result<List<QueryAgentByNameDTO>> queryAgentByNameAndIds(String name,List<Long> ids);

	/**删除供应商
	 * @param id
	 * @return
	 */
	Result deleteById(Long id);
}
